from django.urls import path, include
from rest_framework import routers

from dvadmin.system.views.api_white_list import ApiWhiteListViewSet
from dvadmin.system.views.area import AreaViewSet
from dvadmin.system.views.clause import PrivacyView, TermsServiceView
from dvadmin.system.views.dept import DeptViewSet
from dvadmin.system.views.dictionary import DictionaryViewSet
from dvadmin.system.views.file_list import FileViewSet
from dvadmin.system.views.login_log import LoginLogViewSet
from dvadmin.system.views.menu import MenuViewSet
from dvadmin.system.views.menu_button import MenuButtonViewSet
from dvadmin.system.views.message_center import MessageCenterViewSet
from dvadmin.system.views.operation_log import OperationLogViewSet
from dvadmin.system.views.role import RoleViewSet
from dvadmin.system.views.role_menu import RoleMenuPermissionViewSet
from dvadmin.system.views.role_menu_button_permission import RoleMenuButtonPermissionViewSet
from dvadmin.system.views.system_config import SystemConfigViewSet
from dvadmin.system.views.user import UserViewSet
from dvadmin.system.views.menu_field import MenuFieldViewSet
from dvadmin.system.views.post import PostViewSet

system_url = routers.SimpleRouter()

# 使用 routers.SimpleRouter() 注册的路由会自动生成 RESTful API 接口
# 包括列表视图和详情视图。
# 列表视图 (List View):
#   - URL 格式: /api/system/prefix/
#   - HTTP 方法: GET (获取列表), POST (创建新对象)
# 详情视图 (Detail View):
#   - URL 格式: /api/system/prefix/<pk>/
#   - HTTP 方法: GET (获取单个对象), PUT (更新对象), PATCH (部分更新对象), DELETE (删除对象)

system_url.register(r'menu', MenuViewSet)  # 菜单管理
system_url.register(r'menu_button', MenuButtonViewSet)  # 菜单按钮管理
system_url.register(r'role', RoleViewSet)  # 角色管理
system_url.register(r'dept', DeptViewSet)  # 部门管理
system_url.register(r'user', UserViewSet)  # 用户管理
system_url.register(r'operation_log', OperationLogViewSet)  # 操作日志管理
system_url.register(r'dictionary', DictionaryViewSet)  # 字典管理
system_url.register(r'area', AreaViewSet)  # 地区管理
system_url.register(r'file', FileViewSet)  # 文件管理
system_url.register(r'api_white_list', ApiWhiteListViewSet)  # API 白名单管理
system_url.register(r'system_config', SystemConfigViewSet)  # 系统配置管理
system_url.register(r'message_center', MessageCenterViewSet)  # 消息中心管理
system_url.register(r'role_menu_button_permission', RoleMenuButtonPermissionViewSet)  # 角色菜单按钮权限管理
system_url.register(r'role_menu_permission', RoleMenuPermissionViewSet)  # 角色菜单权限管理
system_url.register(r'column', MenuFieldViewSet) # 菜单字段管理
system_url.register(r'post', PostViewSet) # 岗位管理


urlpatterns = [
    # 用户管理相关接口
    path('user/export/', UserViewSet.as_view({'post': 'export_data', })),  # 导出用户数据
    path('user/import/', UserViewSet.as_view({'get': 'import_data', 'post': 'import_data'})),  # 导入用户数据
    path('user/dept_tree/', UserViewSet.as_view({'get': 'dept_tree'})),  # 获取部门树数据

    # 系统配置相关接口
    path('system_config/save_content/', SystemConfigViewSet.as_view({'put': 'save_content'})),  # 保存系统配置内容
    path('system_config/get_association_table/', SystemConfigViewSet.as_view({'get': 'get_association_table'})),  # 获取关联表信息
    path('system_config/get_table_data/<int:pk>/', SystemConfigViewSet.as_view({'get': 'get_table_data'})),  # 获取指定表的数据
    path('system_config/get_relation_info/', SystemConfigViewSet.as_view({'get': 'get_relation_info'})),  # 获取关联信息

    # 登录日志相关接口
    path('login_log/', LoginLogViewSet.as_view({'get': 'list'})),  # 获取登录日志列表
    path('login_log/<int:pk>/', LoginLogViewSet.as_view({'get': 'retrieve'})),  # 获取指定登录日志详情

    # 部门管理相关接口
    path('dept_lazy_tree/', DeptViewSet.as_view({'get': 'dept_lazy_tree'})),  # 获取部门懒加载树数据

    # 条款相关接口
    path('clause/privacy.html', PrivacyView.as_view()),  # 隐私条款页面
    path('clause/terms_service.html', TermsServiceView.as_view()),  # 服务条款页面

    # 角色管理相关接口
    path('role/treeselect/', RoleViewSet.as_view({'get': 'treeselect'})),  # 获取角色树数据
    path('role/<int:pk>/roleMenuTreeselect/', RoleViewSet.as_view({'get': 'roleMenuTreeselect'})),  # 获取指定角色拥有的菜单权限
    path('role/<int:pk>/deptTreeSelect/', RoleViewSet.as_view({'get': 'deptTreeSelect'})),  # 获取指定角色拥有的部门权限
]
urlpatterns += system_url.urls

